﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace API_CIC.CapaControl
{
    public class cRolesControl
    {

        public static string verificarUsuario(SGAPFUSUARIO p_usu)
        {
            int conta = 0;
            
            String where = "";
            if (p_usu != null)
            {
                System.Collections.IEnumerator enu;
                Boolean gestionProyectos = false;
                Boolean gestionUsuariosRoles = false;
                Boolean gestionActivos = false;
                Boolean gestionGaleria = false;
                Boolean administrador = false;
                List<SGAPFROL_PERMISO> lista = CapaDatos.cRolesDatos.GetRolPermiso(p_usu.COD_ROLADMIN);
                enu = lista.GetEnumerator();
                while (enu.MoveNext())
                {
                    if (((SGAPFROL_PERMISO)enu.Current).COD_PERMISO == 1)
                        gestionProyectos = true;
                    if (((SGAPFROL_PERMISO)enu.Current).COD_PERMISO == 2)
                        gestionUsuariosRoles = true;
                    if (((SGAPFROL_PERMISO)enu.Current).COD_PERMISO == 3)
                        gestionActivos = true;
                    if (((SGAPFROL_PERMISO)enu.Current).COD_PERMISO == 4)
                        gestionGaleria = true;
                    if (((SGAPFROL_PERMISO)enu.Current).COD_PERMISO == 5)
                        administrador = true;
                }

                if (administrador || gestionProyectos) //Mostramos solo los proyectos que permite los permisos otorgados a cada usuario
                {

                    IEnumerator<SGAPFUSUARIO_ROL> enume = p_usu.SGAPFUSUARIO_ROLs.GetEnumerator();
                    while (enume.MoveNext() && enume.Current.SGAPFROLE != null)
                    {
                        administrador = false;
                        gestionProyectos = false;
                        List<SGAPFROL_PERMISO> lista2 = CapaDatos.cRolesDatos.GetRolPermiso(enume.Current.SGAPFROLE.ID_ROL);
                        enu = lista2.GetEnumerator();
                        while (enu.MoveNext())
                        {
                            if (((SGAPFROL_PERMISO)enu.Current).COD_PERMISO == 1)
                                gestionProyectos = true;
                            if (((SGAPFROL_PERMISO)enu.Current).COD_PERMISO == 2)
                                gestionUsuariosRoles = true;
                            if (((SGAPFROL_PERMISO)enu.Current).COD_PERMISO == 3)
                                gestionActivos = true;
                            if (((SGAPFROL_PERMISO)enu.Current).COD_PERMISO == 4)
                                gestionGaleria = true;
                            if (((SGAPFROL_PERMISO)enu.Current).COD_PERMISO == 5)
                                administrador = true;
                        }
                        if (administrador || gestionProyectos)
                        {
                            if (conta != 0)
                            {
                                where += " OR ";

                            }
                            conta++;
                            where += "ID_PROYECTO=" + enume.Current.COD_PROYECTO;
                        }
                    }
                    if (p_usu.SGAPFPROYECTOs != null)
                    {

                        IEnumerator<SGAPFPROYECTO> en = CapaDatos.cProyectosDatos.GetProyectosCoordinador(p_usu.ID_CEDULA);
                            
                        while (en.MoveNext())
                        {
                            if (conta != 0)
                            {
                                where += " OR ";

                            }
                            where += "ID_PROYECTO=" + en.Current.ID_PROYECTO;
                            conta++;
                        }
                    }

                }
            }
            if (conta == 0)
                where += "ID_PROYECTO=-1";
            return where;
        }

        public static void GuardarRoles(string p_usuario, string p_proyecto, 
                                        System.Web.UI.WebControls.ListItemCollection p_listaRoles)
        {
            int usuario = Int32.Parse(p_usuario);
            int proy = Int32.Parse(p_proyecto);
            SGAPFUSUARIO usu = CapaDatos.cUsuariosDatos.GetUsuario(usuario);

            usu.SGAPFUSUARIO_ROLs.Clear();

            CapaDatos.cUsuariosDatos.borrarUsuariosRol(proy, usuario);
            for (int i = 0; i < p_listaRoles.Count; i++)
            {

                if (p_listaRoles[i].Selected)
                {

                    int rol = Int32.Parse(p_listaRoles[i].Value.ToString());
                    SGAPFUSUARIO_ROL ur = new SGAPFUSUARIO_ROL();
                    ur.COD_PROYECTO = proy;
                    ur.COD_USUARIO = usuario;
                    ur.COD_ROL = rol;
                    CapaDatos.cUsuariosDatos.agregarUsuariosRol(ur);

                }

            }
        }




        /// <summary>
        /// Propósito: Manda a ingresar un rol con sus respectivos permisos a cRolesDatos
        /// </summary>
        public static void IngresarRol(string p_Nombre, string p_Descripcion, 
                                    System.Web.UI.WebControls.CheckBoxList p_cblPermisos)
        {
            SGAPFROLE rol = new SGAPFROLE();
            rol.NOM_ROL = p_Nombre;
            rol.DSC_ROL = p_Descripcion;
            
            
            System.Collections.IEnumerator enu = p_cblPermisos.Items.GetEnumerator();
            while (enu.MoveNext())
            {
                if (((System.Web.UI.WebControls.ListItem)enu.Current).Selected)
                {
                    
                    SGAPFROL_PERMISO rolPermiso = new SGAPFROL_PERMISO();
                    rolPermiso.COD_PERMISO = Int32.Parse(((System.Web.UI.WebControls.ListItem)enu.Current).Value);
                    rol.SGAPFROL_PERMISOs.Add(rolPermiso);
                }
            }
            CapaDatos.cRolesDatos.Ingresar(rol);
        }

        public static void ModificarRol(string p_rol, System.Web.UI.WebControls.CheckBoxList p_cblPermisosModificar)
        {
            SGAPFROLE rol = CapaDatos.cRolesDatos.GetRol(Int32.Parse(p_rol));
            rol.SGAPFROL_PERMISOs.Clear();
            System.Collections.IEnumerator enu = p_cblPermisosModificar.Items.GetEnumerator();
            while (enu.MoveNext())
            {
                if (((System.Web.UI.WebControls.ListItem)enu.Current).Selected)
                {
                    SGAPFROL_PERMISO rolPermiso = new SGAPFROL_PERMISO();
                    rolPermiso.COD_PERMISO = Int32.Parse(((System.Web.UI.WebControls.ListItem)enu.Current).Value);
                    rol.SGAPFROL_PERMISOs.Add(rolPermiso);
                }
            }
            CapaDatos.cRolesDatos.Modificar(rol);
            
        }
    }
}